package com.taobao.top.api;
 
import java.util.TreeMap;

import com.taobao.top.api.exception.ApiException;
import com.taobao.top.beans.AppConstants;
import com.taobao.top.utils.APIUtil;

/**
 * 用户API
 * <p>
 * 提供了用户基本信息查询功能
 * 
 * @author <a href="http://weibo.com/shichaosong">Shichao Song</a>
 * @see http://api.taobao.com/apidoc/api.htm?path=cid:1-apiId:1
 * @version 1.0
 */
public class Yonghu_API {
	/**
	 * 获取单个用户信息
	 * 
	 * @param fields
	 *            <p>
	 *            需返回的字段列表。
	 *            </p>
	 *            <p>
	 *            可选值：User结构体中的所有字段；以半角逗号(,)分隔。
	 *            </p>
	 *            <p>
	 *            不支持：地址，真实姓名，身份证，手机，电话
	 *            </p>
	 * 
	 * @param nick
	 *            <p>
	 *            用户昵称，如果昵称为中文，请使用UTF-8字符集对昵称进行URL编码。
	 *            </p>
	 *            <p>
	 *            注：在传入session的情况下,可以不传nick，表示取当前用户信息；否则nick必须传.
	 *            </p>
	 *            <p>
	 *            自用型应用不需要传入nick
	 *            </p>
	 * 
	 * @return 返回的是XML或者JSON字符串格式的User类型，我一致返回为字符串类型，让用户在客户端解析
	 */
	public String getUser(String format,
			String mFields, String nick) throws ApiException {
		TreeMap<String, String> apiparamsMap = new TreeMap<String, String>(); 
		/* 添加除方法名和签名之外的系统级参数 */
		apiparamsMap.putAll(APIUtil.getSystemParams());
		/* 用户需要自定义返回的格式，默认为XML */
		if(format != null || !format.equals("")){
			apiparamsMap.put("format", format);
		}
		/* API方法名 */
		apiparamsMap.put("method", "taobao.users.get");  
		/* 需要获取的字段 */
		apiparamsMap.put("fields", mFields);  
		if(nick != null || !nick.equals("")){
			apiparamsMap.put("nick", nick);
		}
		 
		/* 生成签名 */
		String sign = APIUtil.md5Signature(apiparamsMap, AppConstants.SECRET);
		apiparamsMap.put("sign", sign);
		
		String paramsString = APIUtil.getContent(apiparamsMap);
		String responseData = APIUtil.getResult(AppConstants.APIURL,
				paramsString);

		return responseData;
	}
 
	/**
	 * 传入多个淘宝会员帐号返回多个用户公开信息 
	 * 
	 * @param method 
	 * @param format
	 * @param mFields  查询字段：User数据结构的公开信息字段列表，以半角逗号(,)分隔
	 * @param mNicks  用户昵称，多个以半角逗号(,)分隔，最多40个
	 * @return
	 * @throws Exception
	 */
	public String getUsers(String format, String mFields, String mNicks) throws ApiException {
		// <P>没必要加必须参数不为空的判断啊，因为必须参数我都在签名用m开头标识了。
		/*  应用级输入参数,不能为空的参数的判断  */
//		if(mFields == null || mFields.equals("") || mNicks == null || mNicks.equals("")){
//			return null;
//		}
		
		TreeMap<String, String> apiparamsMap = new TreeMap<String, String>();
		/* 添加除方法名和签名之外的系统级参数 */
		apiparamsMap.putAll(APIUtil.getSystemParams());
		/* 用户需要自定义返回的格式，默认为XML */
		if(format != null || !format.equals("")){
			apiparamsMap.put("format", format);
		}
		/* API方法名 */
		apiparamsMap.put("method", "taobao.users.get");  
		/* 需要获取的字段 */
		apiparamsMap.put("fields", mFields);  
		apiparamsMap.put("nicks", mNicks);
	 
		// 生成签名
		String sign = APIUtil.md5Signature(apiparamsMap, AppConstants.SECRET);
		apiparamsMap.put("sign", sign);
		
		String paramsString = APIUtil.getContent(apiparamsMap);
		String responseData = APIUtil.getResult(AppConstants.APIURL, paramsString);

		return responseData;
	}

}
